package jing.filter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
 * 拦截器：
 * 执行问题：
 * 1.有多个拦截器时，preHandle方法为顺序执行，其他方法为逆序执行
 * 
 * 2.preHandle方法返回值为假postHandle、afterCompletion方法不执行，
 * 并且其他的拦截器文件中都不执行postHandle方法
 * 
 * 3.多个拦截器执行时，其中一个preHandle方法返回值为假，则包括它本身自己在内的，他之后的拦截器都不执行
 * 
 * 应用场景：
 * 日志处理的拦截器：必须通过才能处理日志，所以日志处理需要放在拦截器顺序的第一位
 * 
 * 登录认证的拦截器：如果有日志处理的拦截器，那就放在日志的下面，如果没有，那就放在第一位
 * 
 * 权限管理的拦截器：放在登录认证拦截器的下面，因为只用登录了，才有权限
 *
 */
public class Filter1 implements HandlerInterceptor {

	/*
	 *  在控制器之后执行，一般用于处理异常，日志的处理等
	 */
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("filter1      arterCompletion");
	}

	/*
	 *  在控制器返回modelandview之前执行
	 *  一般用于统一显示视图的模板，比如菜单栏等
	 */
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		System.out.println("filter1      postHandler");
	}

	/*
	 *  在控制器之前执行，一般用于身份验证，区分用户等级
	 *  返回假，就不会执行控制器了
	 */
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		System.out.println("filter1      preHandler");
		return true;
	}

}
